<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
//   function fn (cb) {
//     console.log(cb);
//     let i = 0;
//     setTimeout(() => {
//       i = 10;
//       cb(i);
//     },2000)
//   }
   
//   fn(val => { // 回调函数 
//     console.log(val);
//   })


// promise
//   function fn () {
//     let i = 0;
//     let obj = new Promise((resolve,reject) => { // Pending 等待中 一单进入等待中，必须有结果。
//     //成功可以用 resolve    失败使用reject
//         setTimeout(() => {
//           i = 10;
//         //   reject(i)
//         resolve(i)
//         },2000)
//     })
//     console.log(obj);
//     return obj
//   }
//   fn()
  // 只有promise 对象，才能使用,.then
//   fn().then(res => {
//     console.log(res);
//   }).catch(err => {
//     console.log(err);
//   }).finally(() => { // 无论成功或者失败都能触发
//     // console.log(res);
//     console.log('执行了');
//   })


  // 解决异步的终级方案？

//   function fn (cb) {
//     setTimeout(() => {
//       let num = 20
//       cb(num)
//     },3000)
//   }

//   function fn1 (cb) {
//     setTimeout(() => {
//       let num = 30
//       cb(num)
//     },2000)
//   }

// 计算两个函数的相加的值。
// let a = null;
// fn(val => {
//   a = val
//   fn1(n => {
//     console.log(n + a);
//   })
// })


function fn () {
   return new Promise((resolve,reject) => {
      setTimeout(() => {
        let num = 20
        resolve(num)
      },3000)
   })
  }

  function fn1 () {
    return new Promise((resolve,reject) => {
      setTimeout(() => {
        let num = 30
        resolve(num)
      },2000)
   })
  }

//   fn().then(a => {
//     // console.log(res);
//     fn1().then(b => {
//         console.log(a+b);
//     })
//   })
  
//  async 和 await 是成对出现的，有 await 必须有 async。async 函数中可以写多个 await
//  async function getRult () {
//    // await 等待的意思
//    let a = await fn();
//    // 如果 a 没有结果就不往下执行。
//    let b = await fn1();
//    return a + b;
//  }

let getRult = async () => {
     // await 等待的意思
   let a = await fn();
   // 如果 a 没有结果就不往下执行。
   let b = await fn1();
   return a + b;
}
 // 特别注意：async 和 await 可以把一个普通函数变成 promise函数。
//  console.log(getRult());
 getRult().then(res => {
    console.log(res);
 });



// 第二个接口，需要传入的参数，依赖第一个接口的返回值。


// axios 咋来的。vue 针对 axios 在封装。

</script>